package cn.itcast.nems.oldems.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
public class StudentRecordClazzDTO implements Serializable {
    /**
     * 学生ID
     */
    private Integer id;
    /**
     * 学籍ID
     */
    private String studentRecordId ;
    /**
     * 出班结算日期;退学、转班、进待定班、结课等出班的操作都应记录该值。
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime settlementDate;

    /**
     * 出班结算原因; 见值ReferenceTypeEnum枚举值
     */
    private String settlementReason;
    /**
     * 学生名姓名
     */
    private String name;
    /**
     * 性别
     */
    private String gender;
    /**
     * 学号
     */
    private String number;
    /**
     * 班级ID
     */
    private Integer clazzId;
    /**
     * 班级名称
     */
    private String clazzName;
    /**
     * 校区ID
     */
    private String schoolId;
    /**
     * 授课模式
     */
    private String teachingModel;
    /**
     * 学科ID
     */
    private String subjectId;
    /**
     * 班级类型ID
     */
    private String clazzTypeId;
    /**
     * 学籍操作锁;枚举值：0｜无锁、1｜已上锁；场景：处于升班场景中的学籍，不允许再办理转班等其他操作。
     */
    private Byte lockFlag;
    /**
     * 班级预计结课时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate predictionGraduationDate ;
    // 该学籍班级的开班时间
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate startDate;
    // 该学籍班级的进班时
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate studentRecordInDate;

    /**
     * 是否升级就业班
     */
    private Boolean upgradeable ;
}
